//
//  RBClearCacheCell.m
//  Budejie
//
//  Created by 华杨科技 on 2017/10/14.
//  Copyright © 2017年 饶波. All rights reserved.
//

#import "RBClearCacheCell.h"
#import <SDImageCache.h>
#import <SVProgressHUD.h>

#define kCustomCacheFile [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Custom"]

@implementation RBClearCacheCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        // 添加活动指示器
        UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
        [loadingView startAnimating];
        self.accessoryView = loadingView;
        

        // 设置默认文字
        self.textLabel.text = @"清除缓存(正在计算......)";
        
        // 代码顺序对文字颜色有影响:放在文字前面,文字一直都是,灰色;放在后面,文字颜色始终都是黑色的
        self.userInteractionEnabled = NO; // 禁用cell点击事件
        
        
//        int age = 10;
//        typeof(age) age2 = 10;
        
//        __weak RBClearCacheCell * weakSelf = self;
        __weak typeof(self) weakSelf = self;
        
        // 子线程进行耗时操作:eg:计算缓存文件大小，不然界面会卡死
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
#warning 休眠
            [NSThread sleepForTimeInterval:5.0];
            
            unsigned long long size = 0;
            // 计算缓存
            // SDWebImage 
            size = [SDImageCache sharedImageCache].getSize;
            // 自定缓存文件
            size += kCustomCacheFile.rb_fileSize;
            
            NSLog(@"1111");
            
            // 如果cell销毁,就直接返回
            if (weakSelf == nil) return; // 主要判断的时机问题:1.代码从上到下顺序执行,2.耗时操作一旦开始,你就不能立即终止他,就像你开车一样,你车速跑快了,你一脚刹车,车轮子停止了,车还要往前冲一节子，不是你想停，想停就能停的。
            
            NSLog(@"2222");
            
            NSString *sizeText = nil;
            if (size > pow(10, 9)) { // GB  pow(10,9)   1000*1000*1000
                sizeText = [NSString stringWithFormat:@"%.2fGB",size/pow(10, 9)];
            }else if (size > pow(10, 6)){ // MB 
                sizeText = [NSString stringWithFormat:@"%.2fMB",size/pow(10, 6)];
            }else if (size > pow(10, 3)) { // KB
                sizeText = [NSString stringWithFormat:@"%.2fkB",size/pow(10, 3)];
            }else {
                sizeText = [NSString stringWithFormat:@"%zd",size];
            }
            
            //计算完成之后: 在主线程显示缓存大小
            dispatch_async(dispatch_get_main_queue(), ^{
                weakSelf.textLabel.text = [NSString stringWithFormat:@"清除缓存(%@)",sizeText]; 
                // 移除活动指示器
                weakSelf.accessoryView = nil;
                
                 weakSelf.userInteractionEnabled = YES; // 启用cell点击事件
                // 添加手势:清除缓存
                [weakSelf addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:weakSelf action:@selector(clearCache)]];
                
                RBNSLogFunction;
            });
        });
    }
    
    return self;
}

// 清除缓存
- (void)clearCache
{
    RBNSLogFunction;
    
    // 添加遮盖:防止重复点击
    [SVProgressHUD showWithStatus:@"正在清除"];
    [SVProgressHUD setDefaultStyle:SVProgressHUDStyleDark];
    
    // 清除SDWebImage 的缓存文件
    [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
    
        // 清除自定义的缓存文件
        NSFileManager *mgr = [NSFileManager defaultManager];
        [mgr removeItemAtPath:kCustomCacheFile error:nil];
        
#warning 休眠
        [NSThread sleepForTimeInterval:2.0];
        
        // UI线程更新UI
        dispatch_async(dispatch_get_main_queue(), ^{
            [SVProgressHUD dismiss];
            self.textLabel.text = @"清除缓存(0kB)"; 
        });
    }];
}

//当cell重新显示到屏幕上,也会调用layoutSubViews方法 重新显示活动指示器
- (void)layoutSubviews 
{
    [super layoutSubviews];
    
    RBNSLogFunction;
    UIActivityIndicatorView *loadingView = (UIActivityIndicatorView *)self.accessoryView;
    [loadingView startAnimating];
}

- (void)dealloc {
    NSLog(@"cell 死了");
}

//- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
//{
//    if (self=[super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
//        
//        // 默认文字 如果设置文字之前 userInteractionEnabled = NO,文字颜色会变成灰色(且变不会来了,故把他放在后面)
//        self.textLabel.text = @"清除缓存(正在计算中......)";
//        self.userInteractionEnabled = NO;
//        
//        // 添加活动指示器
//        UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
//        // 开启动画
//        [loadingView startAnimating];
//        self.accessoryView = loadingView;
//                 
//        // 在子线程中计算缓存大小
//        dispatch_async(dispatch_get_global_queue(0, 0), ^{
//#warning 休眠
//            [NSThread sleepForTimeInterval:10];
//            
//            unsigned long long size = 0;
//            //缓存文件size 
//            size = kCustomCacheFile.rb_fileSize +  [SDImageCache sharedImageCache].getSize;
//            
//            
//            
//            // 如果cell已经被销毁,直接返回
//            if (self == nil) return;
//            
//            NSString *sizeText = nil;
//            if (size > pow(10, 9)) { // GB  // pow(10,9) == 1000*1000*1000
//                sizeText = [NSString stringWithFormat:@"%.2fGB",size / pow(10, 9)];
//            }else if (size > pow(10, 6)) { // MB
//                sizeText = [NSString stringWithFormat:@"%.2fMB",size /pow(10, 6)];
//            }else if (size > pow(10, 3)) { // KB
//                sizeText = [NSString stringWithFormat:@"%.2fkB",size / pow(10, 3)];
//            }else { // B
//                sizeText = [NSString stringWithFormat:@"%zdB",size];
//            }
//            
//            // 缓存文字
//            NSString *text = [NSString stringWithFormat: @"清除缓存(%@)",sizeText];
//            
//            // 在主线程中显示计算结果
//            dispatch_async(dispatch_get_main_queue(), ^{
//                self.textLabel.text = text;
//                self.accessoryView = nil; // 清除活动指示器
//                self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//                
//                // 恢复点击事件 
//                self.userInteractionEnabled = YES;
//                
//                // 缓存大小计算好之后，再添加手势清除缓存
//                // 清除缓存手势
//                [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clearCache)]];
//                
//            });            
//        });
//    }
//    return self;
//}
//
//
///**
//清除缓存
// */
//- (void)clearCache
//{
//    RBNSLogFunction;
//    // 添加正在清除活动指示器:    
////    [SVProgressHUD showWithStatus:<#(nullable NSString *)#> maskType:<#(SVProgressHUDMaskType)#>];
//    [SVProgressHUD showWithStatus:@"正在清除缓存"];
//    [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
//    
//    //清除缓存文件
//    // SDWebImage 
//    [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
//        
//        // 在子线程中删除缓存文件
//        dispatch_async(dispatch_get_global_queue(0, 0), ^{
//            // 自定义的缓存文件
//            NSFileManager *mgr = [NSFileManager defaultManager];
//            [mgr removeItemAtPath:kCustomCacheFile error:nil]; // 删除文件夹及其中的所有文件
//            [mgr createDirectoryAtPath:kCustomCacheFile withIntermediateDirectories:YES attributes:nil error:nil];// 重新创建一个空文件夹
//        });
//
//#warning 休眠
//        [NSThread sleepForTimeInterval:2];
//        
//        // 所有缓存清除完毕 
//        dispatch_async(dispatch_get_main_queue(), ^{
//            // 移除指示器
//            [SVProgressHUD dismiss];
//            // 设置文字
//            self.textLabel.text = @"清除缓存(0)";
//        });
//
//    }];
//}
//
//
//#pragma mark - 重新设置约束:
//- (void)layoutSubviews {
//    [super layoutSubviews];
//
//    NSLog(@"关键词");
//    // cell 重新显示的时候,继续转圈
//    UIActivityIndicatorView *loadingView = (UIActivityIndicatorView *)self.accessoryView;
//    [loadingView startAnimating];
//    
//    
//    // 这种写法有问题:不能重新创建;直接点不了
//    //    UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
//    //    [loadingView startAnimating];
//    //    self.accessoryView = loadingView;
//}
//
//
//- (void)dealloc {
//    RBNSLogFunction;
//}
@end
